package main

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"net"
)

// tcp client
func main() {
	conn, err := net.Dial("tcp", "127.0.0.1:20000")
	if err != nil {
		fmt.Println("err :", err)
		return
	}
	defer conn.Close()
	// inputReader := bufio.NewReader(os.Stdin)

	// for {
	// 	input, _ := inputReader.ReadString('\n') // 读取用户的输入
	// 	inputInfo := strings.Trim(input, "\r\n")
	// 	if strings.ToUpper(inputInfo) == "Q" {
	// 		// 如果输入了 Q 就退出
	// 		return
	// 	}
	// 	_, err := conn.Write([]byte(inputInfo)) // 发送数据
	// 	if err != nil {
	// 		return
	// 	}
	// 	buf := [512]byte{}
	// 	// 接受服务器的数据
	// 	n, err := conn.Read(buf[:])
	// 	if err != nil {
	// 		fmt.Println("recv failed, err:", err)
	// 		return
	// 	}
	// 	fmt.Println(string(buf[:n]))
	// }

	for i := 0; i < 20; i++ {
		msg := `Hello, Hello. How are you?`
		data, err := encode(msg)
		if err != nil {
			fmt.Println("encode msg failed, err:", err)
			return
		}
		conn.Write(data)
	}
}

// encode 消息编码
func encode(message string) ([]byte, error) {
	// 读取消息的长度， 转换 int32 类型（4 个字节）
	var length = int32(len(message))
	pkg := new(bytes.Buffer)
	// 写入消息头
	err := binary.Write(pkg, binary.LittleEndian, length)
	if err != nil {
		return nil, err
	}
	// 写入消息体
	err = binary.Write(pkg, binary.LittleEndian, []byte(message))
	if err != nil {
		return nil, err
	}
	return pkg.Bytes(), nil
}
